#ifndef BARDE_H
#define BARDE_H 1

#include "Classe.h"
using namespace std;

/**
 * Cette classe implémente le barde de l'univers AD&D. Ce touche à
 * tout possède des talents de Voleur, peut lancer des sorts de mage
 * et peut sélectionner ses armes dans la liste des Guerriers.
 *
 * Si le personnage ne sélectionne aucun des talents de Voleurs
 * proposés, il obtient alors 20 PP de bonus, à dépenser pour ses
 * compétences diverses.
 *
 * @author Johan "Solo" Luisier
 */

class Barde : public Classe
{
 private:
 protected:
  static const unsigned nbrCompetences, /**< Nombre de compétences disponibles. */
    nbrRestrictions, /**<  Nombre de restritions disponibles. */
    ppAlloues; /**< Nombre de PP alloués à la création. */
 /**
  * Liste de restrictions
  */
  static const vector<CompetenceClasse> Comp;
  /**
   * Ensemble des prérequis sur les traits.
   */
  static const vector< Prerequis > Limites;
  /**
   * Ensemble des races autorisées pour cette Classe.
   */
  static const set< string > RacesAdmises;
  void calculNiveau();
  unsigned calculeTAc0() const;
  void calculNivMag();
 public:
  Barde( unsigned xp, const vector< unsigned >& trait, unsigned& PP,
	 const string& race );
  Barde( unsigned xp );
  Barde( const bool& UI );
  Barde(Classe *ptr);
  ~Barde();
  void appliquerModif( const string& nomRace, const unsigned& dexterite );
  void augmenterTalents( const string& nomRace, 
			 const vector< unsigned >& traits,
			 const bool& lvl_up = true );
  void js(unsigned *tab) const;
  void ecrireSorts( const string& nom_fichier, const bool& ecrase,
		    const unsigned& sagesse = -1u ) const;
  void sortsParNiveau( vector< unsigned >& sorts,
		       const unsigned& ) const;
  void ajoutSorts();
  void prixAcces(map<string, unsigned>*& Map) const;
  unsigned pourcent(const bool& lvlUp = true) const;
  string scoreAdditionnel(const unsigned& i) const;
  unsigned aSpecialisation() const;
};

#endif
